#include <memory> 
#include"UdpServer.hpp"
#include <cstdio>
#include<cstring>
using namespace std;


void Usage(string proc)
{
    cout<<"\n\tUsage : "<<proc<<" ServerIp ServerPort"<<endl;
}

// string Func(const string& proc)
// {
//     string res="server get message:";
//     res+=proc;
//     return res;
// }

// bool CheckSafe(const string& cmd)
// {
//     vector<string> key_word={
//         "rm",
//         "mv",
//         "cp",
//         "kill",
//         "sudo",
//         "unlink",
//         "uninstall",
//         "yum",
//         "top",
//         "while"
//     };
//     for(auto& word:key_word)
//     {
//         auto pos=cmd.find(word);
//         if(pos!=std::string::npos)  return false;
//     }
//     return true;
// }

// string ExcuteCommand(const string& cmd)
// {
//     if(!CheckSafe(cmd))   
//     {
//        return "Bad man";
//     }
//     FILE* fp=popen(cmd.c_str(),"r");   //创建子进程，打开管道，子进程的stdout重定向到了管道的写端。子进程执行命令
//     if(fp==nullptr)
//     {
//         perror("popen");
//         return "error";
//     }
//     char buffer[1024];
//     string result;
//     while(true)
//     {
//         char* ok=fgets(buffer,sizeof(buffer),fp);  //fgets函数会自动在buffer的有效字符后面加\0，有效字符最多只能有sizeof(buffer)-1个，多了会丢失
//         if(ok==nullptr)
//         {
//             break;
//         }
//         result+=buffer;
//     }
//     pclose(fp);
//     return result;
// }

//./udpserver serverport
int main(int argc,char* argv[])
{
    if(argc<2)
    {
        Usage(argv[0]);
        exit(1);
    }

    uint16_t port=stoi(argv[1]);  //stoi:字符串转化为整数
    std::unique_ptr<Udpserver> svr(new Udpserver(port));  //在类内，port会被转化为网络字节序

    svr->Init();
    svr->Run();
    
    return 0;
}